package com.mastercard.assets.web.struts.actions;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAlertaUsuario;
import com.mastercard.assets.jpa.TblFormaAlerta;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.util.to.UserLogin;
import java.util.ArrayList;
import java.util.List;

public class CalcularNumeroAlertas
        extends Action {

    public ActionForward execute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)
            throws
            IOException,
            ServletException {
        HttpSession session = request.getSession();

        // en caos de null
        if (session == null) {
            return mapping.findForward("noLogin");
        }

        // toma el userLogin
        UserLogin user = (UserLogin) session.getAttribute("UserLogin");

        // en caso de null
        if (user == null) {
            return mapping.findForward("noLogin");
        }

        int userId = user.getCveUsuario(), rol = user.getActualRoleId(), cuenta = user.getActualCountId(), numAlerts = 0, cuentaAlerta = 0;

        List<TblAlertaUsuario> sinLeer = MasterCardDAO.getNoLeidas( userId ) ; // user.getAlertsNotReaded( ) ;

        List< TblAlertaUsuario> resSinLeer = new ArrayList< TblAlertaUsuario>();

        if (rol == 2 || rol == 5) {

            // recorre alertas sin leer
            for (TblAlertaUsuario alert : sinLeer) {
                int clvRol = 0;

                // la alerta debe tener la clave del usuario y la cuanta
                if (alert.getTblUsuario().getCveUsuario() == userId) {

                    if( alert.getTblNotificacion( ) == null )
                        {
                            List< TblFormaAlerta > fa = alert.getTblAlerta( ).getTblFormaAlertas( ) ;
                            
                            for( TblFormaAlerta FA : fa )
                            {
                                if( ( FA.getTipo( ) == 3 || FA.getTipo( ) == 2 ) &&
                                        ( FA.getTblRole( ).getCveRole( ) == rol ) )
                                {
                                    resSinLeer.add(alert);
                                }
                            }
                        }else{
                            
                            int alNot = alert.getTblNotificacion().getTblRole().getCveRole();                        

                            if (alNot == rol) {
                                clvRol = 1;
                            }

                            if (clvRol == 1) {
                                resSinLeer.add(alert);
                            }
                            
                        }
                }
            }

        } else {

            // recorre alertas sin leer
            for (TblAlertaUsuario alert : sinLeer) {
                int clvRol = 0;
                // si tiene numero de cuenta
                if (alert.getTblCuenta() != null) {                    
                    cuentaAlerta = alert.getTblCuenta().getCveCuenta();
                    
                    // la alerta debe tener la clave del usuario
                    if (alert.getTblUsuario().getCveUsuario() == userId && cuentaAlerta == cuenta) {
                        
                        if( alert.getTblNotificacion( ) == null )
                        {
                            List< TblFormaAlerta > fa = alert.getTblAlerta( ).getTblFormaAlertas( ) ;
                            
                            for( TblFormaAlerta FA : fa )
                            {
                                if( ( FA.getTipo( ) == 3 || FA.getTipo( ) == 2 ) &&
                                        ( FA.getTblRole( ).getCveRole( ) == rol ) )
                                {
                                    resSinLeer.add(alert);
                                }
                            }
                        }else{
                            
                            int alNot = alert.getTblNotificacion().getTblRole().getCveRole();                        

                            if (alNot == rol) {
                                clvRol = 1;
                            }

                            if (clvRol == 1) {
                                resSinLeer.add(alert);
                            }
                            
                        }
                        
                    }
                }
                        // sin no tiene numero de ceunta
                else
                    
                    if ( alert.getTblNotificacion().getTblRole().getCveRole() == rol && alert.getTblUsuario().getCveUsuario() == userId 
                            && alert.getLeida() == 1 && alert.getTblNotificacion().getTipoNotificacion() > 6 )                         
                        resSinLeer.add(alert);

            }

        }



        if (resSinLeer.size() > 0) {
            numAlerts = resSinLeer.size();
        }

        user.setNumAler( numAlerts ) ;
        //request.setAttribute( "NumeroAlertas" , user.getNumberOfAlertsNotReaded( ) ) ;
        request.setAttribute("NumeroAlertas", numAlerts);

        return mapping.findForward("success");
    }
}
